library(pastecs)
require(graphics)
library(factoextra)
library(cluster)
library(fpc)
library(fossil)
library(NbClust)
library(clustertend)
library(corrplot)
library(stats)
library(psych)
Veri setinde, meme kanseri tümörlerinin iyi veya kötü huylu olup olmadıklarına dair elde edilen gözlemler yer almaktadır.
Kümeleme analizi yapılırken, ID değerleri kullanılacaktır.
Veri setinin ikinci sütununda kanser teşhisi koyulan kişilerin tümörlerinin huyu belirtilmiştir.
Verinin analizinde kullanılacak 3.sütundan 12.sütuna kadar olan değerler ise (hücre çekirdeğine ait özelliklerin ortalamasıdır)aşağıda belirtilen değerlerin ortalamasıdır.
radius_mean: merkezden noktaya olan uzaklıkları
texture_mean: gri tonlamalı değerlerin standart sapmaları
perimeter_mean: hücre çekirdeğinin çevreleri
area_mean: hücre çekirdeğinin alanları
smoothness_mean: yarıçap uzunluklarındaki yerel değişim
compactness_mean: en küçük kanser hücreleri (perimeter^2 / area - 1.0)
concavity_mean: kontürün iç bükey kısımlarının şiddeti
concave.points_mean: kontürün iç bükey kısımlarının sayısı
symmetry_mean: simetri
fractal_dimension_mean: fraktal boyutu
data <- read.csv(file="wdbc.csv",sep=",",header = TRUE,row.names = 1)
data <- data[,1:11]
head(data,6)
## diagnosis radius_mean texture_mean perimeter_mean area_mean
## 842302 M 17.99 10.38 122.80 1001.0
## 842517 M 20.57 17.77 132.90 1326.0
## 84300903 M 19.69 21.25 130.00 1203.0
## 84348301 M 11.42 20.38 77.58 386.1
## 84358402 M 20.29 14.34 135.10 1297.0
## 843786 M 12.45 15.70 82.57 477.1
## smoothness_mean compactness_mean concavity_mean
## 842302 0.11840 0.27760 0.3001
## 842517 0.08474 0.07864 0.0869
## 84300903 0.10960 0.15990 0.1974
## 84348301 0.14250 0.28390 0.2414
## 84358402 0.10030 0.13280 0.1980
## 843786 0.12780 0.17000 0.1578
## concave.points_mean symmetry_mean fractal_dimension_mean
## 842302 0.14710 0.2419 0.07871
## 842517 0.07017 0.1812 0.05667
## 84300903 0.12790 0.2069 0.05999
## 84348301 0.10520 0.2597 0.09744
## 84358402 0.10430 0.1809 0.05883
## 843786 0.08089 0.2087 0.07613
569 gözlem ve 11 değişken üzerinden verinin analizi yapılacaktır.
stat.desc(data[,-1])
## radius_mean texture_mean perimeter_mean area_mean
## nbr.val 569.0000000 5.690000e+02 5.690000e+02 5.690000e+02
## nbr.null 0.0000000 0.000000e+00 0.000000e+00 0.000000e+00
## nbr.na 0.0000000 0.000000e+00 0.000000e+00 0.000000e+00
## min 6.9810000 9.710000e+00 4.379000e+01 1.435000e+02
## max 28.1100000 3.928000e+01 1.885000e+02 2.501000e+03
## range 21.1290000 2.957000e+01 1.447100e+02 2.357500e+03
## sum 8038.4290000 1.097581e+04 5.233038e+04 3.726319e+05
## median 13.3700000 1.884000e+01 8.624000e+01 5.511000e+02
## mean 14.1272917 1.928965e+01 9.196903e+01 6.548891e+02
## SE.mean 0.1477358 1.803088e-01 1.018666e+00 1.475301e+01
## CI.mean.0.95 0.2901752 3.541534e-01 2.000813e+00 2.897711e+01
## var 12.4189201 1.849891e+01 5.904405e+02 1.238436e+05
## std.dev 3.5240488 4.301036e+00 2.429898e+01 3.519141e+02
## coef.var 0.2494497 2.229712e-01 2.642083e-01 5.373645e-01
## smoothness_mean compactness_mean concavity_mean
## nbr.val 5.690000e+02 5.690000e+02 5.690000e+02
## nbr.null 0.000000e+00 0.000000e+00 1.300000e+01
## nbr.na 0.000000e+00 0.000000e+00 0.000000e+00
## min 5.263000e-02 1.938000e-02 0.000000e+00
## max 1.634000e-01 3.454000e-01 4.268000e-01
## range 1.107700e-01 3.260200e-01 4.268000e-01
## sum 5.482900e+01 5.937002e+01 5.052681e+01
## median 9.587000e-02 9.263000e-02 6.154000e-02
## mean 9.636028e-02 1.043410e-01 8.879932e-02
## SE.mean 5.895989e-04 2.214026e-03 3.342028e-03
## CI.mean.0.95 1.158060e-03 4.348678e-03 6.564242e-03
## var 1.977997e-04 2.789187e-03 6.355248e-03
## std.dev 1.406413e-02 5.281276e-02 7.971981e-02
## coef.var 1.459536e-01 5.061555e-01 8.977525e-01
## concave.points_mean symmetry_mean fractal_dimension_mean
## nbr.val 5.690000e+02 5.690000e+02 5.690000e+02
## nbr.null 1.300000e+01 0.000000e+00 0.000000e+00
## nbr.na 0.000000e+00 0.000000e+00 0.000000e+00
## min 0.000000e+00 1.060000e-01 4.996000e-02
## max 2.012000e-01 3.040000e-01 9.744000e-02
## range 2.012000e-01 1.980000e-01 4.748000e-02
## sum 2.783499e+01 1.030811e+02 3.573184e+01
## median 3.350000e-02 1.792000e-01 6.154000e-02
## mean 4.891915e-02 1.811619e-01 6.279761e-02
## SE.mean 1.626700e-03 1.149266e-03 2.959858e-04
## CI.mean.0.95 3.195081e-03 2.257331e-03 5.813603e-04
## var 1.505661e-03 7.515428e-04 4.984872e-05
## std.dev 3.880284e-02 2.741428e-02 7.060363e-03
## coef.var 7.932036e-01 1.513248e-01 1.124304e-01
apply(data[,-1],2, var)
## radius_mean texture_mean perimeter_mean
## 1.241892e+01 1.849891e+01 5.904405e+02
## area_mean smoothness_mean compactness_mean
## 1.238436e+05 1.977997e-04 2.789187e-03
## concavity_mean concave.points_mean symmetry_mean
## 6.355248e-03 1.505661e-03 7.515428e-04
## fractal_dimension_mean
## 4.984872e-05
sum(is.na(data[,-1]))
## [1] 0
Değişkenlerin ortalamaları ve varyanslarına bakıldığında çok fazla değişkenlik gösterdiğini görüyoruz. Aynı zamanda verimizde eksik gözlem de bulunmamaktadır.
corr=cor(data[,-1])
corrplot.mixed(corr,lower.col = "black",tl.cex=0.6,tl.pos = "lt")
Korelasyon matrisine bakıldığında;
radius_mean ile perimeter_mean, area_mean, ve concave.points_mean değişkenleri arasında pozitif yönde oldukça güçlü bir ilişki vardır. Aynı zamanda radius_mean ile compactness_mean ve concavity_mean değişkenleri arasında pozitif yönde güçlü bir ilişki vardır. radius_mean ile fractal_dimension_mean değişkeni arasında negatif yönde zayıf bir ilişki vardır.
texture_mean ile smoothness_mean ve fractal_dimension_mean değişkenleri arasında negatif yönde oldukça zayıf bir ilişki vardır. texture_mean ile geriye kalan 7 değişken arasında pozitif yönde zayıf bir ilişki vardır.
perimeter_mean değişkeni ile area_mean, concavity_mean ve concave.points_mean değişkenleri arasında pozitif yönde oldukça güçlü bir ilişki vardır. perimeter_mean değişkeni ile fractal_dimension_mean değişkeni arasında negatif yönde zayıf bir ilişki vardır.
compactness_mean değişkeni ile concavity_mean ve concave.points_mean değişkenleri arasında pozitif yönde güçlü bir ilişki vardır.
concave.points_mean değişkeni ile concavity_mean değişkeni arasında da pozitif yönde oldukça güçlü bir ilişki vardır.
par(mar=c(10,4,1,1))
boxplot(data[,-1],las=2)
Boxplot’a bakıldığında;
değişkenlerin uç değerlere sahip olduğunu ve değişkenliğin fazla olduğu görülüyor.
perimeter_mean ve area_mean değişkenlerinin değişiminin diğer değişkenlerden farklı olduğu gözükmektedir.
Verideki değişkenlerin değişkenlikleri ve ölçüm birimleri birbirinden farklı olduğu için temel bileşenler analizinin standartlaştırılmış veri üzerinden yapılması gerekiyor.Bu durumda öncelikle verimizi scale ediyoruz.
data_new <- scale(data[,-1])
data.cor=cor(data_new)
data.eigen=eigen(data.cor)
data.eigen
## eigen() decomposition
## $values
## [1] 5.4785879917 2.5187135854 0.8806151792 0.4990094357 0.3725391897
## [6] 0.1241417485 0.0800853104 0.0348897928 0.0111354606 0.0002823059
##
## $vectors
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.36393793 -0.313929073 -0.12442759 0.029558858 0.031067022
## [2,] -0.15445113 -0.147180909 0.95105659 0.008916084 0.219922761
## [3,] -0.37604434 -0.284657885 -0.11408360 0.013458069 0.005945081
## [4,] -0.36408585 -0.304841714 -0.12337786 0.013442682 0.019341222
## [5,] -0.23248053 0.401962324 -0.16653247 -0.107802033 0.843745292
## [6,] -0.36444206 0.266013147 0.05827786 -0.185700413 -0.240182967
## [7,] -0.39574849 0.104285968 0.04114649 -0.166653523 -0.312533244
## [8,] -0.41803840 0.007183605 -0.06855383 -0.072983951 0.009180198
## [9,] -0.21523797 0.368300910 0.03672364 0.892998475 -0.112888068
## [10,] -0.07183744 0.571767700 0.11358395 -0.349331790 -0.264878077
## [,6] [,7] [,8] [,9] [,10]
## [1,] -0.264180150 0.04418839 0.084834062 -0.474425305 0.6690714888
## [2,] -0.032206572 -0.02055748 -0.007126797 -0.004212629 -0.0002497826
## [3,] -0.237819464 0.08336923 0.089258879 -0.380167210 -0.7404905337
## [4,] -0.331707454 -0.26118796 0.144609749 0.747347357 0.0323589585
## [5,] 0.062225368 -0.01129197 0.170503128 -0.005847386 -0.0036904058
## [6,] 0.005271104 0.80380484 0.063980134 0.218732407 0.0527527802
## [7,] 0.601467155 -0.36713629 0.449573315 -0.081170670 0.0103668020
## [8,] 0.265613395 -0.14131308 -0.850918762 0.022024652 0.0037475480
## [9,] -0.061957003 -0.04790201 0.016455606 -0.009067850 -0.0014669472
## [10,] -0.567918997 -0.34521359 -0.065259461 -0.129667491 -0.0070573477
data.pca <- prcomp(data_new, center = TRUE, scale. = FALSE)
data.pca
## Standard deviations (1, .., p=10):
## [1] 2.34063837 1.58704555 0.93841099 0.70640600 0.61035989 0.35233755
## [7] 0.28299348 0.18678810 0.10552469 0.01680196
##
## Rotation (n x k) = (10 x 10):
## PC1 PC2 PC3 PC4
## radius_mean -0.36393793 0.313929073 -0.12442759 0.029558858
## texture_mean -0.15445113 0.147180909 0.95105659 0.008916084
## perimeter_mean -0.37604434 0.284657885 -0.11408360 0.013458069
## area_mean -0.36408585 0.304841714 -0.12337786 0.013442682
## smoothness_mean -0.23248053 -0.401962324 -0.16653247 -0.107802033
## compactness_mean -0.36444206 -0.266013147 0.05827786 -0.185700413
## concavity_mean -0.39574849 -0.104285968 0.04114649 -0.166653523
## concave.points_mean -0.41803840 -0.007183605 -0.06855383 -0.072983951
## symmetry_mean -0.21523797 -0.368300910 0.03672364 0.892998475
## fractal_dimension_mean -0.07183744 -0.571767700 0.11358395 -0.349331790
## PC5 PC6 PC7 PC8
## radius_mean -0.031067022 0.264180150 -0.04418839 0.084834062
## texture_mean -0.219922761 0.032206572 0.02055748 -0.007126797
## perimeter_mean -0.005945081 0.237819464 -0.08336923 0.089258879
## area_mean -0.019341222 0.331707454 0.26118796 0.144609749
## smoothness_mean -0.843745292 -0.062225368 0.01129197 0.170503128
## compactness_mean 0.240182967 -0.005271104 -0.80380484 0.063980134
## concavity_mean 0.312533244 -0.601467155 0.36713629 0.449573315
## concave.points_mean -0.009180198 -0.265613395 0.14131308 -0.850918762
## symmetry_mean 0.112888068 0.061957003 0.04790201 0.016455606
## fractal_dimension_mean 0.264878077 0.567918997 0.34521359 -0.065259461
## PC9 PC10
## radius_mean 0.474425305 -0.6690714888
## texture_mean 0.004212629 0.0002497826
## perimeter_mean 0.380167210 0.7404905337
## area_mean -0.747347357 -0.0323589585
## smoothness_mean 0.005847386 0.0036904058
## compactness_mean -0.218732407 -0.0527527802
## concavity_mean 0.081170670 -0.0103668020
## concave.points_mean -0.022024652 -0.0037475480
## symmetry_mean 0.009067850 0.0014669472
## fractal_dimension_mean 0.129667491 0.0070573477
(data.pca$sdev)^2
## [1] 5.4785879917 2.5187135854 0.8806151792 0.4990094357 0.3725391897
## [6] 0.1241417485 0.0800853104 0.0348897928 0.0111354606 0.0002823059
Scree Plot
screeplot(data.pca, type='lines')
Açıklama Yüzdesi
summary(data.pca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 2.3406 1.5870 0.93841 0.7064 0.61036 0.35234
## Proportion of Variance 0.5479 0.2519 0.08806 0.0499 0.03725 0.01241
## Cumulative Proportion 0.5479 0.7997 0.88779 0.9377 0.97495 0.98736
## PC7 PC8 PC9 PC10
## Standard deviation 0.28299 0.18679 0.10552 0.01680
## Proportion of Variance 0.00801 0.00349 0.00111 0.00003
## Cumulative Proportion 0.99537 0.99886 0.99997 1.00000
Özdeğerlerin 1’den büyük olması
(data.pca$sdev)^2
## [1] 5.4785879917 2.5187135854 0.8806151792 0.4990094357 0.3725391897
## [6] 0.1241417485 0.0800853104 0.0348897928 0.0111354606 0.0002823059
\(\bullet\) \(\bullet\) Sonuç olarak 3 yöntemde ele alındığında bileşen sayısının 3 olarak belirlenmesine karar verilmiştir.
data.pca$rotation[,c(1,2,3)]
## PC1 PC2 PC3
## radius_mean -0.36393793 0.313929073 -0.12442759
## texture_mean -0.15445113 0.147180909 0.95105659
## perimeter_mean -0.37604434 0.284657885 -0.11408360
## area_mean -0.36408585 0.304841714 -0.12337786
## smoothness_mean -0.23248053 -0.401962324 -0.16653247
## compactness_mean -0.36444206 -0.266013147 0.05827786
## concavity_mean -0.39574849 -0.104285968 0.04114649
## concave.points_mean -0.41803840 -0.007183605 -0.06855383
## symmetry_mean -0.21523797 -0.368300910 0.03672364
## fractal_dimension_mean -0.07183744 -0.571767700 0.11358395
Yapılan temel bileşenler analizinden sonra burada bileşenlerin değişkenlerden etkilenme durumları gözükmektedir.Bu sonuçlara göre;
PC1 yani birinci bileşene en çok etki eden değişkenler: radius_mean(-0.36), perimeter_mean(-0.37), area_mean(-0.36), compactness_mean(-0.36), concavity_mean(-0.39), concave.points_mean(-0.41).
PC2 yani ikinci bileşene en çok etki eden değişkenler: smoothness_mean(-0.40), symmetry_mean(-0.368), fractal_dimension_mean(-0.51).
PC3 yani üçüncü bileşene en çok etki eden değişken ise texture_mean(0.95) değişkenidir.
head(data.pca$x[,c(1,2,3)])
## PC1 PC2 PC3
## 842302 -5.219562 -3.2016111 -2.1694307
## 842517 -1.726575 2.5386054 -1.0187821
## 84300903 -3.966267 0.5495913 -0.3232843
## 84348301 -3.593551 -6.8989994 0.7921346
## 84358402 -3.148321 1.3568784 -1.8605969
## 843786 -1.380105 -3.3114977 -0.6973879
3 yeni bileşen için yeni gözlem değerleri de bu şekildedir.
fviz_pca_biplot(data.pca, repel = FALSE,
col.var = "contrib",
col.ind = "cos2"
,labelsize=3
)
Görsele bakıldığında;
Verilerin çoğunun aynı özelliklere sahip olduğunu ve aynı noktada toplandığını görebiliriz.
1.bileşendeki değeri en yüksek olan gözlemlerin ID’leri; 911296202, 865423, 86355, 8610862, 8611555, 899987, 873592, 8810703.En düşük değere sahip olan gözlemin ID’si 92751 dir.
2.bileşendeki değeri en yüksek olan gözlemlerin ID’leri; 915186 ve 84348301. En düşük değere sahip olan gözlemin ID’si 8810703’dir.
1.bileşendeki değeri en yüksek olan 8 gözlem ve 2.bileşendeki değeri en yüksek olan 2 gözlem haricinde gözlemlerin çoğunun değişkenler tarafından benzer değerler aldığı görülmektedir.
Bütün bunlar doğrultusunda diyebiliriz ki verinin analizi için açıklanmak isteneni açıklamada yeterli olmayan değişkenler seçilmiş ya da gözlem sayısı yetersiz gelmiş olabilir.
Kümeleme Analizi
Kümeleme analizi yapılırken pca analizi sonucunda 3 yeni bileşen için elde edilen yeni gözlem değerleri kullanılacaktır.
data_p <- data.pca$x[,c(1,2,3)]
-Kümeleme eğiliminin değerlendirilmesinde öncelikle hopkins istatistiğine sonrasında VAT algoritmasına bakılacaktır.
-HOPKINS İSTATİSTİĞİ:
Verinin uniform dağılımdan üretilme olasılığını ölçerek veri kümesinin kümelenme eğilimini değerlendirir.
\({H_0}\) = data uniform dağılıma uyar.
\({H_1}\) = data uniform dağılıma uymaz.
set.seed(123)
h_data=hopkins(data_p, nrow(data_p)-1)
h_data
## $H
## [1] 0.246597
Hopkins istatistiğinin 0’a yakın çıkması durumunda \({H_0}\) reddedilir.Bu da verinin önemli ölçüde kümelenebilir olduğunu gösterir.Yani bu veri seti için de hopkins istatistiği(0.24) 0’a yakın bir sonuç verdiğinden verimizin kümelenebilir bir veri olduğunu anlıyoruz.
-VAT ALGORİTMASI:
Kümeleme eğilimine görsel bir değerlendirme sağlar.
Kümeler içinde benzer nesneler olacak şekilde sıralanır. Sıralı bir farklılık matrisi oluşturulur. Oluşturulan bu matris VAT Algoritmasının görsel bir çıktısı olan sıralı bir farklılık/benzemezlik görüntüsü olarak görüntülenir.
fviz_dist(dist(data_p), show_labels = FALSE )+
labs(title = "FPL data")
Elde edilen görsel sonucunda veri setimizin bir küme yapısının olduğunu çıkarabiliriz.
En iyi kümeleme algoritmasını ve en uygun küme sayısının seçilmesi için birden çok kümeleme algortimasını karşılaştırabilmesini sağlayan clValid komutu kullanılacaktır.
İki küme geçerliliği ölçümlerini kullanarak kümeleme algoritmalarını karışılaştırır:
a)Dahili Ölçümler: Bağlantı,Dunn İndeksi, Silhoutte Katsayısı
b)Durağanlık Ölçümleri:Kümelenme sonucunun tutarlılığını, her bir sütun kaldırıldıktan sonra elde edilen kümeler ile teker teker karşılaştırarak değerlendirir.
library(clValid)
clmethods <- c("kmeans","pam","hierarchical","clara")
intern <- clValid(data_p,nClust = 2:6,clMethods = clmethods,validation = "internal")
summary(intern)
##
## Clustering Methods:
## kmeans pam hierarchical clara
##
## Cluster sizes:
## 2 3 4 5 6
##
## Validation Measures:
## 2 3 4 5 6
##
## kmeans Connectivity 57.2246 89.5548 142.1639 154.9512 175.7968
## Dunn 0.0267 0.0172 0.0164 0.0235 0.0204
## Silhouette 0.4429 0.3789 0.2776 0.2822 0.2669
## pam Connectivity 50.4206 105.7948 160.9770 201.6274 200.4496
## Dunn 0.0296 0.0182 0.0166 0.0193 0.0255
## Silhouette 0.4328 0.3093 0.2575 0.2462 0.2662
## hierarchical Connectivity 14.9956 19.8421 23.6889 61.6302 65.3310
## Dunn 0.0689 0.0781 0.0781 0.0551 0.0551
## Silhouette 0.5068 0.4550 0.4361 0.3903 0.3819
## clara Connectivity 49.2365 112.8325 139.2298 205.0766 215.0655
## Dunn 0.0332 0.0182 0.0210 0.0209 0.0231
## Silhouette 0.4471 0.3082 0.2426 0.2283 0.2490
##
## Optimal Scores:
##
## Score Method Clusters
## Connectivity 14.9956 hierarchical 2
## Dunn 0.0781 hierarchical 3
## Silhouette 0.5068 hierarchical 2
Silhoutte katsayısının 1’e yakın olması,Dunn indeksinin değerinin büyük olması,bağlantı değerinin de en küçük olması optimum durumdur.
Bu durumda elde edilen çıktıya bakıldığında:
-silhoutte katsayısına,dunn indeksine ve bağlantıya(connectivity) göre hierarchical yöntemi ve silhoutte katsayısı ile bağlantıya göre 2 küme sayısının dunn indeksine göre ise 3 küme sayısının kümeleme için optimum durum olduğunu görüyoruz.(sırasıyla değerler 0.5068,0.0781,14.9956)
stab <- clValid(data_p,nClust = 2:6,clMethods = clmethods,validation = "stability")
summary(stab)
##
## Clustering Methods:
## kmeans pam hierarchical clara
##
## Cluster sizes:
## 2 3 4 5 6
##
## Validation Measures:
## 2 3 4 5 6
##
## kmeans APN 0.1640 0.2583 0.4044 0.3659 0.4538
## AD 3.0868 2.9191 2.9254 2.6818 2.6641
## ADM 0.7629 1.0475 1.6675 1.2214 1.3526
## FOM 1.6230 1.6091 1.6133 1.6080 1.6058
## pam APN 0.2054 0.3343 0.3905 0.4088 0.5403
## AD 3.1211 2.9302 2.8146 2.7065 2.7011
## ADM 0.9576 1.1910 1.3581 1.3388 1.5628
## FOM 1.6234 1.6115 1.6111 1.6100 1.6054
## hierarchical APN 0.0101 0.2042 0.2028 0.1540 0.1809
## AD 3.5163 3.4631 3.4319 3.0561 3.0456
## ADM 0.2614 0.8474 0.8437 1.1407 1.1810
## FOM 1.6229 1.6153 1.6134 1.6016 1.5998
## clara APN 0.2210 0.3242 0.4248 0.4187 0.5222
## AD 3.1479 2.9295 2.9089 2.7580 2.7465
## ADM 0.9840 1.1585 1.5012 1.3753 1.6800
## FOM 1.6227 1.6080 1.6089 1.6131 1.6049
##
## Optimal Scores:
##
## Score Method Clusters
## APN 0.0101 hierarchical 2
## AD 2.6641 kmeans 6
## ADM 0.2614 hierarchical 2
## FOM 1.5998 hierarchical 6
Durağanlık ölçümlerinde elde edilen APN,ADM ve FOM değerleri 0 ile 1 arasında değişir.Küçük değerlerde çıkması yüksek tutarlılıkta kümelenme olduğunun göstergesidir.AD değeri ise 0 ile sonsuz arasında değer alır ve yine küçük değere aship olması tercih edilir.
Bu durumda elde edilen çıktıya bakıldığında;
-APN(0.0101) değeri için hierarchical yöntemi ve 2 küme, -AD(2.6641) değeri için kmeans yöntemi ve 6 küme, -ADM(0.2614) değeri için hierarchical yöntemi ve 2 küme, -FOM(1.5998) değeri için hierarchical yöntemi ve 6 küme optimum durumdur.
**2 yönteme bakıldığında hierarchical kümeleme ve kmeans yöntemi önerilmiştir.Sonuç olarak hangi yöntemin kullanılacağına net olarak karar verilememiştir.İki yöntem için de optimum küme sayıları belirlenerek değerlendirme yapılacaktır.
Bölümlemeye dayalı yöntemlerde küme sayısının belirlenmesi temel bir sorundaur ve bu sorunun kesin bir cevabı yoktur.Bir şekilde özneldir.Benzerlikleri ölçmek için kullanılan yönteme ve bölümleme için kullanılan parametreler bağlıdır.
Basit ve popüler olan hiyerarşik kümeleme kullanılarak üretilen dendogram incelenerek de küme sayısı belirlenebilir ancak bu da özneldir.
Küme sayısının belirlenmesinde kullanılan bazı yöntemler;
a)Doğrudan Yöntemler: küme içerisindeki kareler toplamı veya ortalama silhoutte gibi bir ölçütün optimize edilmesinden oluşur.
b)İstatiksel test yöntemleri: \({H_0}\) hipotezine karşı kanıtların karşılaştırılmasından oluşur.Buna bir örnek gap istatistiğidir.
Bu yöntemlere ek olarak, en uygun sayıda kümeyi tanımlamak için yayınlanmış otuzdan fazla indeks ve yöntem vardır.Çoğunluk kuralını kullanarak küme sayısına karar vermek için bu 30 endeksin tümünü hesaplamada kullanılan R kodları bulunmaktadır.
-Elbow Yöntemi: Toplam küme içi değişimin(wss) en aza indirgenmesi temel düşüncedir.Wss’nin en küçük olduğu konumdaki değer küme sayısı olarak seçilmelidir.Ancak bu yöntemde kesin sonuçlar vermez.
-Silhoutte Yöntemi: Kümelemenin kalitesini ölçer.Yani, her nesnenin kendi kümesinde ne kadar iyi olduğunu belirler.Yüksek ortalama silhoutte genişliği iyi bir kümelenmeyi gösterir.
-Gap İstatistiği Yöntemi: Bu yaklaşım herhangi bir kümeleme yöntemine uygulanabilir.Farklı k değerleri için küme içi varyasyon içindeki toplamı,verilerin sıfır referans dağılımı altında beklenen değerleriyle karşılaştırır.Optimal kümelerin tahmini,gap istatistiğini maksimize eden değer olacaktır.
a)Hierarchical kümeleme için optimal küme sayısının belirlenmesi:
set.seed(123)
p1=fviz_nbclust(data_p, hcut, method = "wss") +
labs(subtitle = "Elbow method")
p2=fviz_nbclust(data_p, hcut, method = "silhouette")+
labs(subtitle = "Silhouette method")
p3=fviz_nbclust(data_p, hcut, nstart = 25, method = "gap_stat", nboot = 50)+
labs(subtitle = "Gap statistic method")
par(mfrow=c(1,3))
p1
p2
p3
Bu sonuçlara bakıldığında elbow yöntemiyle 6 küme, silhoutte ve gap yöntemlerine göre de 2 küme optimum küme sayısı olarak gözükmektedir.
Hierarchical kümeleme yönteminde kullanılan 5 tane bağlantı fonksiyonu vardır.Bunlar Single linkage, complete linkage, Average linkage, Centroid linkage ve Ward minimum varyansdır.Bu fonksiyonlardan average linkage ve Ward minimum varyans kullanılarak optimum küme sayısını belirlemede Çoğunluk kuralına bakılacaktır.
Uzaklık ölçüsü olarak da veride uç değerler olduğundan uçdeğerlerden daha az etkilenmesi nedeniyle manhattan uzaklık ölçüsü kullanılacaktır.
nbclust_data_ward <- NbClust(data_p, distance = "manhattan", min.nc = 2,
max.nc = 9, method = "ward.D2")
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hubert
## index second differences plot.
##
## *** : The D index is a graphical method of determining the number of clusters.
## In the plot of D index, we seek a significant knee (the significant peak in Dindex
## second differences plot) that corresponds to a significant increase of the value of
## the measure.
##
## *******************************************************************
## * Among all indices:
## * 6 proposed 2 as the best number of clusters
## * 10 proposed 3 as the best number of clusters
## * 3 proposed 4 as the best number of clusters
## * 1 proposed 6 as the best number of clusters
## * 2 proposed 8 as the best number of clusters
## * 1 proposed 9 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 3
##
##
## *******************************************************************
fviz_nbclust(nbclust_data_ward)
## Among all indices:
## ===================
## * 2 proposed 0 as the best number of clusters
## * 1 proposed 1 as the best number of clusters
## * 6 proposed 2 as the best number of clusters
## * 10 proposed 3 as the best number of clusters
## * 3 proposed 4 as the best number of clusters
## * 1 proposed 6 as the best number of clusters
## * 2 proposed 8 as the best number of clusters
## * 1 proposed 9 as the best number of clusters
##
## Conclusion
## =========================
## * According to the majority rule, the best number of clusters is 3 .
Ward.D2 bağlantı fonksiyonu kullanıldığında 3 kümenin optimal küme sayısı olduğu gözükmektedir.
nbclust_data_av <- NbClust(data_p, distance = "manhattan", min.nc = 2,
max.nc = 9, method = "average")
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hubert
## index second differences plot.
##
## *** : The D index is a graphical method of determining the number of clusters.
## In the plot of D index, we seek a significant knee (the significant peak in Dindex
## second differences plot) that corresponds to a significant increase of the value of
## the measure.
##
## *******************************************************************
## * Among all indices:
## * 7 proposed 2 as the best number of clusters
## * 2 proposed 3 as the best number of clusters
## * 2 proposed 4 as the best number of clusters
## * 5 proposed 5 as the best number of clusters
## * 2 proposed 6 as the best number of clusters
## * 5 proposed 8 as the best number of clusters
## * 1 proposed 9 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 2
##
##
## *******************************************************************
fviz_nbclust(nbclust_data_av)
## Among all indices:
## ===================
## * 2 proposed 0 as the best number of clusters
## * 7 proposed 2 as the best number of clusters
## * 2 proposed 3 as the best number of clusters
## * 2 proposed 4 as the best number of clusters
## * 5 proposed 5 as the best number of clusters
## * 2 proposed 6 as the best number of clusters
## * 5 proposed 8 as the best number of clusters
## * 1 proposed 9 as the best number of clusters
##
## Conclusion
## =========================
## * According to the majority rule, the best number of clusters is 2 .
Average linkage bağlantı fonksiyonu kullanılarak 2 küme optimal küme sayısı olarak gözükmektedir.
Bu durumda hierarchical kümeleme analizi yapılırken optimum küme sayısı olarak 2 küme belirlenmiştir.
d1=fviz_nbclust(data_p, kmeans, method = "wss") +
labs(subtitle = "Elbow method")
d2=fviz_nbclust(data_p, kmeans, method = "silhouette")+
labs(subtitle = "Silhouette method")
d3=fviz_nbclust(data_p, kmeans, nstart = 25, method = "gap_stat", nboot = 50)+
labs(subtitle = "Gap statistic method")
d1
d2
d3
Bu sonuçlara bakıldığında elbow yöntemiyle 6 küme, silhoutte ve gap yöntemlerine göre de 2 küme optimum küme sayısı olarak gözükmektedir.
nb <- NbClust(data_p, distance = "euclidean", min.nc = 2,
max.nc = 10, method = "kmeans")
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hubert
## index second differences plot.
##
## *** : The D index is a graphical method of determining the number of clusters.
## In the plot of D index, we seek a significant knee (the significant peak in Dindex
## second differences plot) that corresponds to a significant increase of the value of
## the measure.
##
## *******************************************************************
## * Among all indices:
## * 9 proposed 2 as the best number of clusters
## * 7 proposed 3 as the best number of clusters
## * 1 proposed 4 as the best number of clusters
## * 3 proposed 5 as the best number of clusters
## * 3 proposed 7 as the best number of clusters
## * 1 proposed 10 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 2
##
##
## *******************************************************************
fviz_nbclust(nb)
## Among all indices:
## ===================
## * 2 proposed 0 as the best number of clusters
## * 9 proposed 2 as the best number of clusters
## * 7 proposed 3 as the best number of clusters
## * 1 proposed 4 as the best number of clusters
## * 3 proposed 5 as the best number of clusters
## * 3 proposed 7 as the best number of clusters
## * 1 proposed 10 as the best number of clusters
##
## Conclusion
## =========================
## * According to the majority rule, the best number of clusters is 2 .
Çoğunluk kuralına göre kmeans yöntemi için 9 indeks optimum küme sayısını 2 olarak belirlemiştir.
Bu durumda kmeans yöntemi uygulanırken 2 küme optimum küme sayısı olarak belirlenmiştir.
Daha önceden de belirtildiği gibi kmeans ile analiz yapılırken küme sayısı olarak 2 kullanılacaktır.
set.seed(123)
km_p=kmeans(data_p, 2, nstart=25)
head(km_p$cluster,40)
## 842302 842517 84300903 84348301 84358402 843786 844359 84458202
## 1 1 1 1 1 1 1 1
## 844981 84501001 845636 84610002 846226 846381 84667401 84799002
## 1 1 2 2 1 2 1 1
## 848406 84862001 849014 8510426 8510653 8510824 8511133 851509
## 2 1 1 2 2 2 1 1
## 852552 852631 852763 852781 852973 853201 853401 853612
## 1 1 1 1 1 1 1 2
## 85382601 854002 854039 854253 854268 854941 855133 855138
## 1 1 1 1 2 2 2 2
table(km_p$cluster)
##
## 1 2
## 169 400
fviz_cluster(km_p, data = data_p,
ellipse.type = "convex", # Concentration ellipse
star.plot = TRUE, # Add segments from centroids to items
repel = FALSE, # Avoid label overplotting (slow)
ggtheme = theme_minimal()
)
Kmeans yöntemi ile ilk kümeye 169 kişi ikinci kümeye 400 kişi gelecek şekilde kümelenmiştir.
Görsele bakıldığında kümelerin belirlenmesinde smoothness_mean, symmetry_mean ve fractal_dimension_mean değişkenlerinden en çok etkilenen 2.bileşenin etkili olduğunu görüyoruz. Kümelede 0.5 ’i sınır olarak kabul edersek ikinci bileşendeki değeri bu değerden yüksek olanlar bir kümede, değeri bu değerden düşük olanlar bir kümede olacak şekilde ayrılmış gözükmektedir.
Öncelikle kmedoids yöntemi için optimal küme sayısı belirlenecektir.
fviz_nbclust(data_p, pam, method="silhouette")
-Silhoutte yöntemine bakıldığında küme sayısı olarak 2 belirlenmiştir.
set.seed(123)
pam_data=pam(data_p,2)
pam_data$medoids
## PC1 PC2 PC3
## 908445 -2.724787 0.78983892 0.05439776
## 9010598 1.335769 -0.04320513 0.02002320
table(pam_data$clustering)
##
## 1 2
## 177 392
fviz_cluster(pam_data, ellipse.type = "t", repel = FALSE,
ggtheme = theme_classic()
)
Kmedoids yöntemi ile ilk kümeye 177 kişi ikinci kümeye 392 kişi gelecek şekilde kümelenmiştir. Kmeans yönteminden farklı olarak 8 kişi farklı kümede yer almış. (örn:915186 ID’sine sahip kişi )
Küme sayısı 2 için ilk küme medoidi 908445 ID’sine sahip kişi, ikinci küme medoidi ise 9010598 ID’sine sahip kişi olarak belirlenmiştir.
Kmeans yönteminde de olduğu gibi kmedoids yöntemi sonucu oluşturulan görsele bakıldığında kümelerin belirlenmesinde smoothness_mean, symmetry_mean ve fractal_dimension_mean değişkenlerinden en çok etkilenen 2.bileşenin etkili olduğunu görüyoruz. Kümelede 0.5 ’i sınır olarak kabul edersek ikinci bileşendeki değeri bu değerden yüksek olanlar bir kümede, değeri bu değerden düşük olanlar bir kümede olacak şekilde ayrılmış gözükmektedir.
Aşamalı kümeleme(hierarchical) analizi uygulanırken veride uç değerler olmasından dolayı uzaklık ölçüsü olarak manhattan kullanılacaktır. Aynı zamanda daha önce yapılan analizler değerlendirildiğinde hierarchical kümeleme analizi yapılırken optimum küme sayısı olarak 2 küme ve bağlantı fonksiyonu olarak da average linkage kullanılacaktır.
dist_m_data=get_dist(data_p, stand = TRUE, method="manhattan")
hc_m_data=hclust(d=dist_m_data, method="average")
plot(hc_m_data,cex=0.3)
coph_m_data=cophenetic(hc_m_data)
cor(dist_m_data,coph_m_data)
## [1] 0.6798455
Küme ağacının ne kadar iyi oluşturulduğunu anlamanın yollarından biri kojenektif uzaklık ile orjinal uzaklık arasındaki korelasyonu hesaplamaktır.Bu değerin yüksek çıkması kümelemenin geçerli olduğunu gösterir.1’ e ne kadar yakın olursa kümeleme analizi veriyi o kadar iyi tanıtır. Burada elde edilen değer 0.69 ile ortalama bir değerdir.Bu da demek oluyor ki uygulanan kümeleme analizi veriyi çok da iyi olmasa da iyi bir şekilde yansıtmaktadır.
grup_data=cutree(hc_m_data, k=2)
table(grup_data)
## grup_data
## 1 2
## 559 10
which(grup_data==2)
## 8611555 86355 865423 873592 878796 8810703 88299702
## 83 109 123 181 203 213 237
## 89812 899987 911296202
## 340 353 462
fviz_dend(hc_m_data, k = 2, # Cut in four groups
cex = 0.5, # label size
k_colors = c("#2E9FDF", "#FC4E07"),
color_labels_by_k = TRUE, # color labels by groups
rect = TRUE # Add rectangle around groups
)